package org.edu.modules.oa.controller;

import groovy.util.logging.Slf4j;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.SecurityUtils;
import org.edu.common.api.vo.Result;
import org.edu.common.aspect.annotation.AutoLog;
import org.edu.common.system.vo.LoginUser;
import org.edu.modules.oa.entity.VeOaMeetEntity;
import org.edu.modules.oa.entity.VeOaMeetPlaceEntity;
import org.edu.modules.oa.service.IVeOaMeetCheckService;
import org.edu.modules.oa.service.IVeOaMeetPlaceService;
import org.edu.modules.oa.vo.VeOaMeetCheckTableVo;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

@Api(tags="会议审核")
@RestController
@RequestMapping("oa/veOaMeetCheck")
@Slf4j
public class VeOaMeetCheckController {
    // 场地管理业务
    @Resource
    private IVeOaMeetPlaceService iVeOaMeetPlaceService;

    // 场地审核业务
    @Resource
    private IVeOaMeetCheckService iVeOaMeetCheckService;

    // 场地下拉框
    @AutoLog(value = "会议审核-修改场地")
    @PostMapping("/initPlaceBox")
    @ApiOperation(value="显示场地的下拉框", notes="会议管理-加载下拉框")
    public Result<?> initPlaceBox(){
        List<VeOaMeetPlaceEntity> list = iVeOaMeetPlaceService.selectPlaces();
        return Result.OK(list);
    }
    // 日志注解
    @AutoLog(value = "会议审核-显示表格")
    @ApiOperation(value="显示表格", notes="会议场地管理-显示表格")
    // 显示表格
    @PostMapping(value = "/showTable")

    public Result<?> showTable(VeOaMeetCheckTableVo veOaMeetPlaceEntity, Integer startPage, Integer pageSize) {
        HashMap<String, Object> map=iVeOaMeetCheckService.showTable(veOaMeetPlaceEntity,startPage,pageSize);

        return Result.OK(map);
    }
    // 日志注解
    @AutoLog(value = "会议审核-通过/不通过会议")
    @ApiOperation(value="通过/不通过会议", notes="会议场地管理-通过/不通过会议")
    // 批量通过审核/不通过审核
    @PostMapping(value = "/alterPass")

    public Result<?> alterPass(String dataStr,Integer status) {
        // 创建一个可以通过的集合
        List<VeOaMeetEntity> entityList =new ArrayList();
        String data[] = dataStr.split("&&");
        // 进行字符串切割来判断场地时间重复
        for (String s :data){
            String[] objArr = s.split(",");

                VeOaMeetCheckTableVo veOaMeetCheckTableVo =new VeOaMeetCheckTableVo();
                veOaMeetCheckTableVo.setId(Long.valueOf(objArr[0]));
                veOaMeetCheckTableVo.setPlaceId(Integer.valueOf(objArr[1]));

                veOaMeetCheckTableVo.setStartTime("'"+objArr[2]+"'");
                veOaMeetCheckTableVo.setEndTime("'"+objArr[3]+"'");

            System.out.println(veOaMeetCheckTableVo);

            // 进行判断一下改时间和场地有没有重复
            List<String> result= iVeOaMeetCheckService.meetPassed(veOaMeetCheckTableVo);

            VeOaMeetEntity veOaMeetEntity =new VeOaMeetEntity();
            veOaMeetEntity.setId(veOaMeetCheckTableVo.getId());

            veOaMeetEntity.setStatus(status);

            entityList.add(veOaMeetEntity);
            // 只有走通过才会走判断
            if(status==1){
                if(result!=null&&result.size()>0){
                    return Result.error(500,"选择的会议汇中有无法通过审核的，因为选择的会议的时间段的场地已被使用中");

                }

            }

        }
        for (VeOaMeetEntity entity :entityList){
            iVeOaMeetCheckService.alterState(entity);

        }


        return Result.OK();
    }
    // 日志注解
    @AutoLog(value = "会议审核-通过/不通过会议")
    @ApiOperation(value="通过/不通过会议", notes="会议场地管理-通过/不通过会议")
    // 批量通过审核/不通过审核
    @PostMapping(value = "/onePass")

    public Result<?> onePass(VeOaMeetCheckTableVo veOaMeetCheckTableVo,Integer statusPass) {


            String stateTime = "'"+veOaMeetCheckTableVo.getStartTime()+"'";
        String endTime = "'"+veOaMeetCheckTableVo.getEndTime()+"'";
        veOaMeetCheckTableVo.setStartTime(stateTime);
        veOaMeetCheckTableVo.setEndTime(endTime);
        // 进行判断一下改时间和场地有没有重复
        List<String>  result= iVeOaMeetCheckService.meetPassed(veOaMeetCheckTableVo);
            // 赋值给实体类 进行改变状态
            VeOaMeetEntity veOaMeetEntity =new VeOaMeetEntity();
            veOaMeetEntity.setId(veOaMeetCheckTableVo.getId());

            veOaMeetEntity.setStatus(statusPass);
        veOaMeetEntity.setReason(veOaMeetCheckTableVo.getReason());
        System.out.println(veOaMeetEntity);

            // 只有走通过才会走判断
            if(statusPass==1){
                if(result!=null&&result.size()>0){
                    return Result.error(500,"选择的会议汇中有无法通过审核的，因为选择的会议的时间段的场地已被使用中");

                }


            }
        Result.OK( iVeOaMeetCheckService.alterState(veOaMeetEntity));


        return Result.OK();
    }


}
